/*
 * Tactica.java
 *
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes.TacticaCaccy;

import futbol.Bola;
import futbol.Futbol;
import futbol.tacticas.Comando;
import futbol.tacticas.SituacionJugadores;
import futbol.tacticas.concursantes.Tactica;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.util.Vector;


/**
 *
 * @author Administrador
 */
public abstract class Object implements Tactica {
    
	//private static Logger 					log	= Logger.getLogger(Object.class);
	
	protected String		nombre = "Towodo";
	protected Skills 	alineacion[] = null;;
	protected Manager		tecnico;
	protected BufferedImage pizarraImage;
	protected Graphics2D 	pizarra;
	
	public Object()
	{
		startTacticaPersonalitats();
	}
	
	public abstract Skills[] updateAlineacion(boolean alineacionInicial);
	public void startTacticaPersonalitats()
	{
		//log.debug("startTacticaPersonalitats");
		tecnico = new Manager(this); // per defecte sense historial
		
		//if(alineacion!=null)
		//	log.error("startTacticaPersonalitats: alineacion no es null!!");
		
		alineacion = getAlineacion();
	}
	public void resetTacticaPersonalitats()
	{
		int i;
		for( i=0; i<alineacion.length; i++)
		{
			alineacion[i] = null;
		}
		
		alineacion = null;
		
		tecnico = null;
		pizarraImage = null;
		pizarra = null;
	}
	public String getNombre()
	{
		return nombre;
	}
	public Skills[] getAlineacion(){
		
		
		if(alineacion==null)
		{return updateAlineacion(true);
		}
		
		return alineacion;
	}
	
	public Color getColor1()
	{
		return Color.YELLOW;
	}
	public Color getColor2()
	{
		return Color.BLACK;
	}
	public Color getColorNumero()
	{
		return Color.GREEN;
	}
	public int getFuerza(int n)
	{
		return alineacion[n].getFuerza();
	}
	public int getXInicial(int n)
	{
		return ( ( (int)alineacion[n].getXInicial() * 2 ) + 160 );
	}
	public int getYInicial(int n)
	{
		return (int)alineacion[n].getYInicial();
	}
	public Vector<Comando> getComandos(SituacionJugadores sj)
	{
		Vector<Comando> comandos = new Vector<Comando>();
		Vector<Comando> comandosPersonalidad;
		
		
		int i,j;
		tecnico.nuevaSituacionJugadores(sj);
		for( i=0; i<alineacion.length; i++)
		{			
			alineacion[i].actualitzarDades();
		}
		
		// demanem a cada personalitat quines comandes vol executar.
		for( i=0; i<alineacion.length; i++)
		{			
			comandosPersonalidad = alineacion[i].getComandos();	

			if(comandosPersonalidad != null && comandosPersonalidad.size()>0)
			{
				for(j=0; j < comandosPersonalidad.size(); j++)
					comandos.add( comandosPersonalidad.elementAt(j) );
			}
		}
		
		alineacion 		= updateAlineacion(false);
		
		//if(tecnico.getRonda() < 10 || tecnico.getRonda() > 1790) log.debug("end: " + tecnico.getRonda());
		if(tecnico.getRonda() == 1799)
		{
			resetTacticaPersonalitats();
			startTacticaPersonalitats();
		}
			
		return comandos;
	}
	public Manager getTecnico() {
		return tecnico;
	}	
	
	public BufferedImage getPizarraImage(){
		return this.pizarraImage;
	}
	
	public Graphics2D getPizarra(){
		return this.pizarra;
	}
	
}
